数学模型

Wang Haihua

🍈 🍉🍊 🍋 🍌


多周期生产调度问题

在给定的约束条件下,制造企业面临着未来若干时间段的生产-库存规划问题。这个问题被称为多周期生产调度问题

在制造企业,生产-库存需求在多个时期内都是不同的。优化目标是在这种波动的需求中提高单个产品的生产需求。 这类问题的目标函数是与生产和库存相关的总成本最小化。我们可以用滚动的线性规划方法确定每个周期的生产计划。

初始化多周期生产调度问题模型

让我们看看决策模型中的多周期调度生产问题的例子

问题

国家钢铁公司(NSC)生产一种用于飞机和航空航天工业的专用钢。销售部门收到了未来四个月的订单:

月份 Jan Feb Mar Apr
需求 (tons) 2300 2000 3100 3000

NSC可以通过生产钢材、从库存中提取钢材,或将这些手段结合起来,来满足需求。1月初的库存为零。生产成本预计在2月和3月上升。

生产和库存成本为:

月份 Jan Feb Mar Apr
生产成本 3000 3300 3600 3600
存储成本 250 250 250 250

生产成本为每吨美元。库存成本为每月每吨美元。例如,1吨库存1个月的成本是250美元;两个月的费用是500美元。NSC每月最多能生产3000吨钢。以最低成本满足需求的生产计划是什么?

目标函数

$$\min P R O D+I N V$$

其中:

约束条件

(Month 1) $$\quad P_{1}=I_{1}+2300$$ (Month 2) $$\quad I_{1}+P_{2}=I_{2}+2000$$ (Month 3) $$\quad I_{2}+P_{3}=I_{3}+3100$$ (Month 4) $$\quad I_{3}+P_{4}=I_{4}+3000$$

代码实现

# Import all classes of PuLP module
from pulp import *

# 1. Initialize Class
model = LpProblem("Minimize Cost",LpMinimize)
# Define production cost, inventory cost, and demand.
quaters = list(range(4))
prod_cost=[3000, 3300, 3600, 3600]
inv_cost=[250, 250, 250, 250]
demand=[2300, 2000, 3100, 3000]
# 2. Define Decision Variables: Production and Inventory
x = LpVariable.dicts('quater_prod_', quaters,lowBound=0, cat='Continuous')
y = LpVariable.dicts('quater_inv_', quaters,lowBound=0, cat='Continuous')
# 3. Define Objective
model += lpSum([prod_cost[i]*x[i] for i in quaters]) + lpSum([inv_cost[i]*y[i] for i in quaters])
# Define Constraints
# Production-capacity constraints
for i in quaters:
    model.addConstraint(x[i]<=3000)
# Inventory-balance constraints
model.addConstraint(x[0] - y[0] == demand[0]) # (Month 1)
for i in quaters[1:]:
    model.addConstraint(x[i] - y[i] + y[i-1] == demand[i]) # for (Month 2, 3, 4)    
# The problem is solved using PuLP's choice of Solver
model.solve()
# Print the variables optimized value
for v in model.variables():
    print(v.name, "=", v.varValue)
# The optimised objective function value is printed to the screen
print("Value of Objective Function = ", value(model.objective))

结果

quater_inv__0 = 700.0
quater_inv__1 = 1700.0
quater_inv__2 = 0.0
quater_inv__3 = 0.0
quater_prod__0 = 3000.0
quater_prod__1 = 3000.0
quater_prod__2 = 1400.0
quater_prod__3 = 3000.0
Value of Objective Function =  35340000.0

由以上结果,我们可以推断出每个季度最优的库存和生产单位数。这是多周期生产调度问题的最终解决方案。

小结

本文简单介绍了一个多周期生产调度的问题及代码解决方案。

参考资料